package com.ego.product.service;

import com.ego.common.to.member.MemberGroupTo;
import com.ego.common.vo.product.CartUpdateVo;
import com.ego.common.vo.product.CartVo;

import java.util.List;
import java.util.concurrent.ExecutionException;

/**
 * @program: ego
 * @description: 购物车服务
 * @author: KamTang
 * @create: 2022-12-18 08:40
 **/
public interface CartService {

    /**
     * 添加商品到购物车中
     * @param skuId skuId
     * @param count 商品数量
     * @return @see
     * @throws ExecutionException 异步异常
     * @throws InterruptedException 异步异常
     * @see CartVo.CartItem
     */
    CartVo.CartItem addToCart(Long skuId, Integer count) throws ExecutionException, InterruptedException;

    /**
     * 获取购物车
     * @param memberInfo 用户信息
     * @return @see
     * @throws ExecutionException 异步异常
     * @throws InterruptedException 异步异常
     * @see CartVo
     */
    CartVo get(MemberGroupTo memberInfo) throws ExecutionException, InterruptedException;

    /**
     * 清空购物车中所有商品
     * @param cartKey 购物车在缓存中对应的key
     */
    void clearCart(String cartKey);

    /**
     * 勾选购物项
     * @param update 购物车更新对象
     */
    void update(CartUpdateVo update);

    /**
     * 根据skuId删除购物项
     * @param skuId skuId
     * @param promotion 是否为活动商品
     */
    void delete(Long skuId, Integer promotion);

    /**
     * 获取当前用户的购物项
     * @param memberId 当前登录用户id
     * @return @see
     * @see CartVo.CartItem
     */
    List<CartVo.CartItem> getCurrentUserCartItem(Long memberId);
}
